// 实现深拷贝，处理对象/数组

function deepClone(obj, map = new Map()) {
  // 处理 null 和 undefined
  if (obj === null || obj === undefined || typeof obj !== 'object') {
    return obj;
  }
  
  // 处理循环引用
  if (map.has(obj)) {
    return map.get(obj);
  }

  // 处理普通对象/数组
  const clone = Array.isArray(obj) ? [] : {};

  // 缓存当前对象的拷贝
  map.set(obj, clone);

  // 递归拷贝每个属性
  for (const key in obj) {
    // 处理自有属性
    if (obj.hasOwnProperty(key)) {
      clone[key] = deepClone(obj[key], map);
    }
  }

  // 返回拷贝后的对象/数组
  return clone;
}